package managedBeans;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;



import java.util.Vector;

import ejbs.TransactionsBean;



import model.Kunden;
import model.Zimmer;




@SessionScoped
@ManagedBean
public class ZimmerManagement {

	@EJB
	private TransactionsBean transactionsBean;
	
	
	private String name;
	private int maxBelegzahl, zimmerId;
	private float preisEZ = 0, preisDZ = 0, preisDreifachbelegung = 0, preisEZKind = 0, preisEZ2Kinder = 0, preisDZKind = 0;
	private String errorMsg ;
	private String zimmerNameSearch ;
	
	private Vector<Zimmer> zimmern = new Vector<Zimmer>();
	private HtmlDataTable dtZimmern;
	boolean iszimmerFound = false;
	
  
	

	public String addZimmer(){
		
		FacesContext ctx = FacesContext.getCurrentInstance();
		
		
		
		Zimmer zimmer = new Zimmer();
		
		zimmer.setName(this.name);
		zimmer.setMaxBelegZahl(this.maxBelegzahl);
		zimmer.setPreisEZ(this.preisEZ);
		zimmer.setPreisDZ(this.preisDZ);
		zimmer.setPreisDreifachbelegung(this.preisDreifachbelegung);
		zimmer.setPreisEZKind(this.preisEZKind);
		zimmer.setPreisEZ2Kinder(this.preisEZ2Kinder);
		zimmer.setPreisDZKind(this.preisDZKind);
		
		
		if(transactionsBean.isZimmerNameExist(this.name)){
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, transactionsBean.getErr() , "Error"));
			return ("zimmer");
		}else{
			if(transactionsBean.saveNewZimmer(zimmer)){
				 return ("success");
			}else{
				 errorMsg = transactionsBean.getErr();
				 ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, transactionsBean.getErr() , "Error"));
				 
				 return ("zimmer");
			}	
		}
		
	}
	
	public String searchZimmerByName(){
	
		FacesContext ctx = FacesContext.getCurrentInstance();
		zimmern.clear();
		dtZimmern.clearInitialState();
		
		
		
		zimmern = transactionsBean.searchZimmern(this.zimmerNameSearch);
		
		if(zimmern.size() > 0){
			this.iszimmerFound = true;
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "es wurden "+ zimmern.size() + " Zimmer gefunden!","Success"));
		}
		else{ 
			this.iszimmerFound = false;
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Es wurden keine Zimmer gefunden" , "Error"));
		}
		
		
		
		return "zimmersuchen";
	}
	
	
	public String showZimmerDetails(){
		
		FacesContext ctx = FacesContext.getCurrentInstance();
		
		Zimmer zimmer = (Zimmer) dtZimmern.getRowData();
		this.zimmerId = zimmer.getId();
		this.name = zimmer.getName();
		this.maxBelegzahl = zimmer.getMaxBelegZahl();
		this.preisEZ = zimmer.getPreisEZ();
		this.preisDZ = zimmer.getPreisDZ();
		
		this.preisDreifachbelegung = zimmer.getPreisDreifachbelegung();
		this.preisEZKind = zimmer.getPreisEZKind() ;
		this.preisEZ2Kinder = zimmer.getPreisEZ2Kinder();
		this.preisDZKind = zimmer.getPreisDZKind();
		
		
		return "zimmerbearbeiten";
	}
	
	public String editZimmer(){
		
		FacesContext ctx = FacesContext.getCurrentInstance();
		Zimmer zimmer = transactionsBean.getZimmer(this.zimmerId);
		zimmer.setName(name);
		zimmer.setMaxBelegZahl(maxBelegzahl);
		zimmer.setPreisEZ(preisEZ);
		zimmer.setPreisDZ(preisDZ);
		zimmer.setPreisDreifachbelegung(preisDreifachbelegung);
		zimmer.setPreisEZKind(preisEZKind);
		zimmer.setPreisEZ2Kinder(preisEZ2Kinder);
		zimmer.setPreisDZKind(preisDZKind);
		
		if(transactionsBean.editZimmerSave(zimmer)){
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Die Daten wurden erfolgreich gespeichert","Success"));
		}else{
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, transactionsBean.getErr() , "Error"));
		}
		
		return "zimmerbearbeiten"; 
	}
	
	public String removeZimmer(){
		FacesContext ctx = FacesContext.getCurrentInstance();
		Zimmer zimmer = transactionsBean.getZimmer(this.zimmerId);
		
		
		if(transactionsBean.removeZimmerSave(zimmer)){
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Die Daten wurden erfolgreich geloescht","Success"));
		}else{
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, transactionsBean.getErr() , "Error"));
		}
		
		
		return "zimmersuchen";
	}
	
	public Vector<Zimmer> getZimmern() {
		return zimmern;
	}

	public void setZimmern(Vector<Zimmer> zimmern) {
		this.zimmern = zimmern;
	}

	public HtmlDataTable getDtZimmern() {
		return dtZimmern;
	}

	public void setDtZimmern(HtmlDataTable dtZimmern) {
		this.dtZimmern = dtZimmern;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getPreisEZ() {
		return preisEZ;
	}
	public void setPreisEZ(float preisEZ) {
		this.preisEZ = preisEZ;
	}
	public float getPreisDZ() {
		return preisDZ;
	}
	public void setPreisDZ(float preisDZ) {
		this.preisDZ = preisDZ;
	}
	public float getPreisDreifachbelegung() {
		return preisDreifachbelegung;
	}
	public void setPreisDreifachbelegung(float preisDreifachbelegung) {
		this.preisDreifachbelegung = preisDreifachbelegung;
	}
	public float getPreisEZKind() {
		return preisEZKind;
	}
	public void setPreisEZKind(float preisEZKind) {
		this.preisEZKind = preisEZKind;
	}
	public float getPreisEZ2Kinder() {
		return preisEZ2Kinder;
	}
	public void setPreisEZ2Kinder(float preisEZ2Kinder) {
		this.preisEZ2Kinder = preisEZ2Kinder;
	}
	public float getPreisDZKind() {
		return preisDZKind;
	}
	public void setPreisDZKind(float preisDZKind) {
		this.preisDZKind = preisDZKind;
	}
	public int getMaxBelegzahl() {
		return maxBelegzahl;
	}
	public void setMaxBelegzahl(int maxBelegzahl) {
		this.maxBelegzahl = maxBelegzahl;
	}


	public String getErrorMsg() {
		return errorMsg;
	}


	public void setErrorMsg(String errorMsg) {
		this.errorMsg = errorMsg;
	}


	public String getZimmerNameSearch() {
		return zimmerNameSearch;
	}


	public void setZimmerNameSearch(String zimmerNameSearch) {
		this.zimmerNameSearch = zimmerNameSearch;
	}

	public boolean isIszimmerFound() {
		return iszimmerFound;
	}

	public void setIszimmerFound(boolean iszimmerFound) {
		this.iszimmerFound = iszimmerFound;
	}

	public int getZimmerId() {
		return zimmerId;
	}

	public void setZimmerId(int zimmerId) {
		this.zimmerId = zimmerId;
	}
   



	
}
